#include "listecours.h"

ListeCours::ListeCours()
{


}
float ListeCours::TotalCours() const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            Total += this->at(i).gettypeDuCours().getTarif();
        }
    }

    return Total;
}
float ListeCours::TotalCours(QString prof) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
            {
                Total += this->at(i).gettypeDuCours().getTarif();
            }
            else if (prof.isEmpty())
            {
                Total += this->at(i).gettypeDuCours().getTarif();
            }
//            else if (prof != this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                qDebug() << this->at(i).getDate().toString("dddd dd MM yyyy") << " - "  << prof << " - " << this->at(i).getProf().getInfo().NomEtPrenom();
//            }
        }
    }

    return Total;
}

float ListeCours::TotalCours(QString prof, int Mois, int Annee) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
            {
                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
                    Total += this->at(i).gettypeDuCours().getTarif();
            }

        }
    }

    return Total;
}
float ListeCours::TotalCours(QString prof, int Mois, int Annee, int jour) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
            {
                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee && this->at(i).getDate().day() == jour)
                    Total += this->at(i).gettypeDuCours().getTarif();
            }
        }
    }

    return Total;
}
bool ListeCours::TestCoursExiste(QDate Date)const
{

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() == Date)
                return true;
        }
    }

    return false;
}
bool ListeCours::TestCoursPourUnMois(int Mois, int Annee)const
{

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
                return true;
        }
    }

    return false;
}

ListeCours ListeCours::ListeDesCoursPourUnMois(int Mois, int Annee)const
{
    ListeCours l;
    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
                l << this->at(i);
        }
    }

    return l;
}
ListeCours ListeCours::ListeDesCoursPourMoisPrecedent(int Mois, int Annee)const
{
    QDate Date(Annee,Mois, 1);
    ListeCours l;
    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() < Date)
                l << this->at(i);
        }
    }

    return l;
}

QString ListeCours::DureeTotalDeCours()const
{
    int Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            Total += this->at(i).gettypeDuCours().getDuree();
        }
    }
    int Heure = Total/60;
    int minute = Total%60;
    return QString::number(Heure) + " h " + QString::number(minute) + " mn";

}
QString ListeCours::DureeTotalDeCours(int Mois, int Annee)const
{
    int Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
            Total += this->at(i).gettypeDuCours().getDuree();
        }
    }

    QTime t(0,0,Total);
    return t.toString("hh:mm");
}

QString ListeCours::DernierCoursToString()const
{
    QDate Date;

    if (!this->isEmpty())
    {
        Date = this->at(0).getDate();

        for (int i = 1 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() > Date)
            Date = this->at(i).getDate();
        }
    }
    return Date.toString(FORMATDATELONG);
}

QDate ListeCours::DernierCours()const
{
    QDate Date;

    if (!this->isEmpty())
    {
        Date = this->at(0).getDate();

        for (int i = 1 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() > Date)
            Date = this->at(i).getDate();
        }
    }
    return Date;
}
ListeCours ListeCours::TriParJourDeCours()const
{

    if (this->count() > 1)
    {
        ListeCours TriParJour;

        if (!this->isEmpty())
        {
            if (this->count() > 1)
            {
                for (int i = 0 ; i < this->count(); i++)
                {
                    TriParJour << this->at(i);
                }

                Cours jour;

                for (int i = 0 ; i < this->count(); i++)
                {
                    for (int j = 0 ; j <= (this->count() - i - 2); j++)
                    {
                        if (TriParJour.at(j).getDate() >  TriParJour.at(j + 1).getDate())
                        {
                            jour = TriParJour.at(j);
                            TriParJour.removeAt(j);
                            TriParJour.insert(j + 1, jour);
                        }
                    }
                }
            }
        }

        return TriParJour;
    }
    return *this;
}

void ListeCours::TrierParJour()
{
    if (this->count() > 1)
    {
        if (!this->isEmpty())
        {
            Cours jour;

            for (int i = 0 ; i < this->count(); i++)
            {
                for (int j = 0 ; j <= (this->count() - i - 2); j++)
                {
                    if (this->at(j).getDate() >  this->at(j + 1).getDate())
                    {
                        jour = this->at(j);
                        this->removeAt(j);
                        this->insert(j + 1, jour);
                    }
                }
            }
        }
    }
}

QString ListeCours::ListeCoursToString()
{
    QString datas = SEPARATEURLISTECOURS;

    for (int i = 0 ; i < this->count(); i++)
        datas += this->at(i).CoursToString() + SEPARATEURLISTECOURS;

    return datas + SEPARATEURLISTECOURS;
}
void ListeCours::ChargementListeCours(QString datas)
{
    QStringList strdata = datas.split(SEPARATEURLISTECOURS);

//    ListeCours liste;
    for (int i = 1 ; i < strdata.count() - 1; i++)
    {
        if (Cours::StringToCoursTest(strdata.at(i)))
        {
            Cours co(strdata.at(i));
            this->append(co);
        }
    }
//    liste = liste.TriParJourDeCours();

//    for (int j = 0 ; j < liste.count() ; j++)
//    {
//        this->append(liste.at(j));
//    }
    TrierParJour();
    totalCours = TotalCours();
    dernierCours = DernierCoursToString();
}
void ListeCours::AjoutCours(Cours cours)
{
    this->append(cours);
    TrierParJour();
    totalCours = TotalCours();
    dernierCours = DernierCoursToString();
}
void ListeCours::SupprimerCours(int i)
{
    this->removeAt(i);
    totalCours = TotalCours();
    dernierCours = DernierCoursToString();
}
void ListeCours::Clear()
{
    for (int i = this->count() - 1; i >= 0; i--)
    {
        this->removeAt(i);
    }
}
/////////////
//
// Obsolete
//
//////////////
//float ListeCours::TotalCoursPasCeprof(QString prof) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof != this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                Total += this->at(i).gettypeDuCours().getTarif();
//            }
//            else if (prof.isEmpty())
//            {
//                Total += this->at(i).gettypeDuCours().getTarif();
//            }
//        }
//    }

//    return Total;
//}
//float ListeCours::TotalProf(QString prof) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                Total += this->at(i).gettypeDuCours().getPartProf();
//            }
//            else if (prof.isEmpty())
//            {
//                Total += this->at(i).gettypeDuCours().getPartProf();
//            }
//        }
//    }

//    return Total;
//}
//float ListeCours::TotalProf(QString prof, int Mois, int Annee) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
//                    Total += this->at(i).gettypeDuCours().getPartProf();
//            }
//        }
//    }

//    return Total;
//}
//float ListeCours::TotalProf(QString prof, int Mois, int Annee, int jour) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee && this->at(i).getDate().day() == jour)
//                    Total += this->at(i).gettypeDuCours().getPartProf();
//            }
//        }
//    }

//    return Total;
//}

//float ListeCours::TotalAsso(QString prof) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                Total += this->at(i).gettypeDuCours().getPartAsso();
//            }
//            else if (prof.isEmpty())
//            {
//                Total += this->at(i).gettypeDuCours().getPartAsso();
//            }
//        }
//    }

//    return Total;
//}
//float ListeCours::TotalAsso(QString prof, int Mois, int Annee) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
//                    Total += this->at(i).gettypeDuCours().getPartAsso();
//            }
//        }
//    }

//    return Total;
//}
//float ListeCours::TotalAsso(QString prof, int Mois, int Annee, int jour) const
//{
//    float Total = 0;

//    if (!this->isEmpty())
//    {
//        for (int i = 0 ; i < this->count(); i++)
//        {
//            if (prof == this->at(i).getProf().getInfo().NomEtPrenom())
//            {
//                if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee && this->at(i).getDate().day() == jour)
//                    Total += this->at(i).gettypeDuCours().getPartAsso();
//            }
//        }
//    }

//    return Total;
//}
